package com.lottery.material.utils;

import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * Description：处理异常信息的工具类
 * Created by 朱正磊 on 2019-04-11 11:33
 */
@SuppressWarnings("ALL")
public class ExceptionUtil {

	/**
	 * description：获取异常的堆栈信息
	 * user 朱正磊
	 * time 2019-04-11 11:24
	 * @param throwable 异常对象
	 * @return 返回异常信息
	 */
	public static String getStackTrace(Throwable throwable) {
		StringWriter stringWriter = new StringWriter();
        try (PrintWriter printWriter = new PrintWriter(stringWriter)) { //数据流会在try执行完毕后自动被关闭
            throwable.printStackTrace(printWriter);
            return stringWriter.toString();
        }
    }

	/**
	 * description：输出异常信息日志
	 * user 朱正磊
	 * time 2019-04-11 11:31
	 * @param e Throwable包含Exception和Error（比如out of memory）
	 * @return 返回值的内容与e.printStackTrace()输出的内容相同。
	 */
	public static String logExceptionStack(Throwable e) {
		//使用字符串作为物理节点的字符输入输出流的用法
		StringWriter errorsWriter = new StringWriter();
		//new PrintWriter(errorsWriter)只有一个参数，第二个参数默认缺省值是false表示覆盖原内容。
		e.printStackTrace(new PrintWriter(errorsWriter));
		return errorsWriter.toString();
	}

	/**
	 * description：获取异常堆栈信息
	 * user 朱正磊
	 * time 2019-04-11 11:32
	 * @param e Exception
	 * @return 返回值的内容与e.printStackTrace()输出的内容相同。
	 */
	public static String getStackTrace(Exception e) {
		//使用字符串作为物理节点的字符输入输出流的用法
		StringWriter errorsWriter = new StringWriter();
		//第二个参数true表示不覆盖之前文件里面已经有的内容，而是追加内容。默认缺省值false表示覆盖。
		e.printStackTrace(new PrintWriter(errorsWriter, true));
		return errorsWriter.toString();
	}

}
